#!/usr/bin/env python3
# -*- coding: utf-8 -*-
##############################################
# @Author: DengLibin 榆霖
# @Date: Create in 2022-03-15 15:23:42
# @Description: DataFrame
# DataFrame 是一个表格型的数据结构，它含有一组有序的列，每列可以是不同的值类型（数值、字符串、布尔型值）。
# DataFrame 既有行索引也有列索引，它可以被看做由 Series 组成的字典（共同用一个索引）。
##############################################

# DataFrame 构造方法如下：


# pandas.DataFrame( data, index, columns, dtype, copy)
# 参数说明：

# data：一组数据(ndarray、series, map, lists, dict 等类型)。

# index：索引值，或者可以称为行标签。

# columns：列标签，默认为 RangeIndex (0, 1, 2, …, n) 。

# dtype：数据类型。

# copy：拷贝数据，默认为 False。

# Pandas DataFrame 是一个二维的数组结构，类似二维数组。

import pandas as pd


def run():
    data = [['Google',10],['Runoob',12],['Wiki',13]]
    df = pd.DataFrame(data, columns=['Site','Age'], dtype=float)
    print(df)

        
    data = {'Site':['Google', 'Runoob', 'Wiki'], 'Age':[10, 12, 13]}
    df = pd.DataFrame(data)
    print (df)
    
    # 还可以使用字典（key/value），其中字典的 key 为列名:

    data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
    df = pd.DataFrame(data)
    print (df)# 没有对应的部分数据为 NaN。
    
    # Pandas 可以使用 loc 属性返回指定行的数据，如果没有设置索引，第一行索引为 0，第二行索引为 1，以此类推：
    
    data = {
        "calories": [420, 380, 390],
        "duration": [50, 40, 45]
    }

    # 数据载入到 DataFrame 对象
    df = pd.DataFrame(data)
    print('--------------------------------------------------------------')
    print(df)
    # 返回第一行
    print(df.loc[0])
    # 返回第二行
    print(df.loc[1])
    print('--------------------------------------------------------------')
    # 返回第一行和第二行
    print(df.loc[[0, 1]])
    
    print('--------------------------------------------------------------')
    # 可以指定索引值，如下实例：
    df = pd.DataFrame(data, index = ["day1", "day2", "day3"])
    print(df)
    print(df.loc[['day1', 'day2']])
    print('--------------------------------------------------------------')
    # 只要指定列
    data = {
        "mango": [420, 380, 390],
        "apple": [50, 40, 45],
        "pear": [1, 2, 3], 
        "banana": [23, 45,56]
    }
    df = pd.DataFrame(data)
    print(df[["apple","banana"]])
    print('-----------------------------------------------------------')
    print(df.loc[:, 'apple'])
    
if __name__ == '__main__':
   run()
